﻿<?xml version="1.0" encoding="utf-8"?><Articles><Article><ArticlesID>738</ArticlesID><Title>Tối ưu h&amp;#243;a Website với Gzip</Title><Body>&amp;lt;p&amp;gt;Gzip l&amp;amp;agrave; một kỹ thuật trong lập tr&amp;amp;igrave;nh asp.net l&amp;amp;agrave;m tối ưu h&amp;amp;oacute;a dung lượng tải về giữa Client v&amp;amp;agrave; Webserver qua đ&amp;amp;oacute; sẽ tiết kiệm được băng th&amp;amp;ocirc;ng cho Webserver :) &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;Thời gian cho c&amp;amp;aacute;c HTTP Request v&amp;amp;agrave; Response (trả lời) tr&amp;amp;ecirc;n mạng c&amp;amp;oacute; thể được giảm bởi c&amp;amp;aacute;c quyết định s&amp;amp;aacute;ng suốt từ người d&amp;amp;ugrave;ng. Thời gian truy cập web cũng phụ thuộc rất nhiều v&amp;amp;agrave;o người d&amp;amp;ugrave;ng v&amp;amp;iacute; như băng th&amp;amp;ocirc;ng sử dụng Internet của họ hay, ISP. Nhưng một v&amp;amp;agrave;i thứ c&amp;amp;oacute; thể ảnh hưởng tới thời gian trả lời của website. Việc n&amp;amp;eacute;n dung lượng của c&amp;amp;aacute;c file c&amp;amp;oacute; thể n&amp;amp;acirc;ng cao thời gian đ&amp;amp;aacute;p ứng cho HTTP Request.&amp;lt;/font&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;Bắt đầu với HTTP/1.1, c&amp;amp;aacute;c web clients đ&amp;amp;atilde; hỗ trợ việc n&amp;amp;eacute;n với c&amp;amp;aacute;c Accept-Encoding header trong c&amp;amp;aacute;c HTTP Request.&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;Accept-Encoding: gzip, deglate&amp;lt;/font&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;Nếu m&amp;amp;aacute;y chủ web thấy header n&amp;amp;agrave;y trong qu&amp;amp;aacute; tr&amp;amp;igrave;nh request, n&amp;amp;oacute; sẽ n&amp;amp;eacute;n c&amp;amp;aacute;c file hay c&amp;amp;aacute;c th&amp;amp;agrave;nh phần kh&amp;amp;aacute;c sau đ&amp;amp;oacute; mới gửi lại cho web client. Khi đ&amp;amp;oacute; m&amp;amp;aacute;y chủ web sẽ gửi c&amp;amp;aacute;c trả lời trong Encoding header.&amp;lt;/font&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;
Content-Encoding: gzip&amp;lt;/font&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;
Gzip rất phổ biến v&amp;amp;agrave; hiệu quả trong việc n&amp;amp;eacute;n đ&amp;amp;aacute;p ứng vấn đề thời gian trả n&amp;amp;eacute;n, gửi. Được ph&amp;amp;aacute;t triển bởi dự &amp;amp;aacute;n GNU được th&amp;amp;agrave;nh chuẩn RFC 1952. Chỉ v&amp;amp;agrave;i phương ph&amp;amp;aacute;p n&amp;amp;eacute;n kh&amp;amp;aacute;c nhưng bạn sẽ thấy n&amp;amp;oacute; kh&amp;amp;ocirc;ng phổ biến v&amp;amp;agrave; k&amp;amp;eacute;m hiệu quả so với Gzip.&amp;lt;/font&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;Gzipping giảm thời gian đ&amp;amp;aacute;p ứng c&amp;amp;aacute;c y&amp;amp;ecirc;u cầu của client bằng c&amp;amp;aacute;ch n&amp;amp;eacute;n c&amp;amp;aacute;c th&amp;amp;ocirc;ng tin trả lời v&amp;amp;agrave; giảm đươc 70% k&amp;amp;iacute;ch thước. Hầu hết 90% c&amp;amp;aacute;c giao tiếp tr&amp;amp;ecirc;n Internet giữa c&amp;amp;aacute;c tr&amp;amp;igrave;nh duyệt v&amp;amp;agrave; m&amp;amp;aacute;y chủ web đều sử dụng Gzip. Nếu bạn sử dụng Apache, c&amp;amp;oacute; module để bạn cấu h&amp;amp;igrave;nh Gzip như c&amp;amp;aacute;c phi&amp;amp;ecirc;n bản: Apache 1.3 sử dụng Mod Gzip trong khi Apache 2.x sử dụng Mod DeFlate.&amp;lt;/font&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;N&amp;amp;oacute; được hiểu, với c&amp;amp;aacute;c tr&amp;amp;igrave;nh duyệt hay proxy c&amp;amp;oacute; thể sẽ kh&amp;amp;ocirc;ng hiểu được nội dung khi nhận được nếu kh&amp;amp;ocirc;ng hiểu cơ chế n&amp;amp;eacute;n v&amp;amp;agrave; c&amp;amp;aacute;c nội dung đ&amp;amp;atilde; được n&amp;amp;eacute;n. Thật may mắn, hiện nay h&amp;amp;acirc;u hết c&amp;amp;aacute;c tr&amp;amp;igrave;nh duyệt web cũ đều kh&amp;amp;ocirc;ng sử dụng. Module của Apache c&amp;amp;oacute; thể gi&amp;amp;uacute;p bạn them v&amp;amp;agrave;o nhiều dạng headers kh&amp;amp;aacute;c nhau, hỗ trợ nhiều tr&amp;amp;igrave;nh duyệt, t&amp;amp;ugrave;y theo mỗi tr&amp;amp;igrave;nh duyệt m&amp;amp;agrave; tự động lấy một phương ph&amp;amp;aacute;p giải n&amp;amp;eacute;n kh&amp;amp;aacute;c nhau.&amp;lt;/font&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;M&amp;amp;aacute;y chủ chọn Gzip dựa tr&amp;amp;ecirc;n c&amp;amp;aacute;c dạng file, nhưng đa số l&amp;amp;agrave; cũng c&amp;amp;oacute; giới hạn trong việc n&amp;amp;eacute;n. Hầu hết c&amp;amp;aacute;c website đều sử dụng Gzip cho c&amp;amp;aacute;c t&amp;amp;agrave;i liệu HTML. N&amp;amp;oacute; cũng sử dụng Gzip cho c&amp;amp;aacute;c scripts v&amp;amp;agrave; c&amp;amp;aacute;c stylesheets. Nhưng n&amp;amp;oacute; thật th&amp;amp;uacute; vị khi n&amp;amp;eacute;n to&amp;amp;aacute;n bộ c&amp;amp;aacute;c định dạng text như XML v&amp;amp;agrave; JSON. H&amp;amp;igrave;nh ảnh v&amp;amp;agrave; c&amp;amp;aacute;c file dạng PDF c&amp;amp;oacute; thể sẽ kh&amp;amp;ocirc;ng sử dụng được Gzip bởi định dạng đ&amp;amp;oacute; n&amp;amp;oacute; đ&amp;amp;atilde; được n&amp;amp;eacute;n rồi. Sử dụng Gzip kh&amp;amp;ocirc;ng ảnh hưởng tới CPU nhưng n&amp;amp;oacute; c&amp;amp;oacute; nguy cơ tăng k&amp;amp;iacute;ch thước file.&amp;lt;/font&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;Gzipping hỗ trợ rất nhiều định dạng file, dễ d&amp;amp;agrave;ng sử dụng nhằm giảm độ lớn của c&amp;amp;aacute;c file trong giao tiếp tr&amp;amp;ecirc;n giữa web client v&amp;amp;agrave; m&amp;amp;aacute;y chủ web.&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;File Global.asax&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre class=&amp;quot;brush: csharp;&amp;quot; title=&amp;quot;code&amp;quot;&amp;gt;
&amp;amp;lt;%@ Application Language=&amp;amp;quot;C#&amp;amp;quot; %&amp;amp;gt;
&amp;amp;lt;%@ Import Namespace=&amp;amp;quot;System.IO&amp;amp;quot; %&amp;amp;gt;
&amp;amp;lt;%@ Import Namespace=&amp;amp;quot;System.IO.Compression&amp;amp;quot; %&amp;amp;gt;

&amp;amp;lt;script runat=&amp;amp;quot;server&amp;amp;quot;&amp;amp;gt;
void Application_BeginRequest(object sender, EventArgs e)
{
	HttpApplication app = (HttpApplication)sender;
	string acceptEncoding = app.Request.Headers[&amp;amp;quot;Accept-Encoding&amp;amp;quot;];
	Stream prevUncompressedStream = app.Response.Filter;

	if (acceptEncoding == null || acceptEncoding.Length == 0)
		return;

	acceptEncoding = acceptEncoding.ToLower();

	if (acceptEncoding.Contains(&amp;amp;quot;gzip&amp;amp;quot;))
	{
		// gzip
		app.Response.Filter = new GZipStream(prevUncompressedStream,
			CompressionMode.Compress);
		app.Response.AppendHeader(&amp;amp;quot;Content-Encoding&amp;amp;quot;,
			&amp;amp;quot;gzip&amp;amp;quot;);
	}
	else if (acceptEncoding.Contains(&amp;amp;quot;deflate&amp;amp;quot;))
	{
		// defalte
		app.Response.Filter = new DeflateStream(prevUncompressedStream,
			CompressionMode.Compress);
		app.Response.AppendHeader(&amp;amp;quot;Content-Encoding&amp;amp;quot;,
			&amp;amp;quot;deflate&amp;amp;quot;);
	}
}
&amp;amp;lt;/script&amp;amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;kiểm tra lại: &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;a href=&amp;quot;http://www.port80software.com/tools/compresscheck.asp?url=meotom.net&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.port80software.com/tools/compresscheck.asp?url=meotom.net&amp;lt;/a&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
một số website đ&amp;amp;atilde; được Gzip: &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
nước ngo&amp;amp;agrave;i &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;a href=&amp;quot;http://www.port80software.com/tools/compresscheck.asp?url=microsoft.com&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.port80software.com/tools/compresscheck.asp?url=microsoft.com&amp;lt;/a&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;a href=&amp;quot;http://www.port80software.com/tools/compresscheck.asp?url=dell.com&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.port80software.com/tools/compresscheck.asp?url=dell.com&amp;lt;/a&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;a href=&amp;quot;http://www.port80software.com/tools/compresscheck.asp?url=asp.net&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.port80software.com/tools/compresscheck.asp?url=asp.net&amp;lt;/a&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
việt nam &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;a href=&amp;quot;http://www.port80software.com/tools/compresscheck.asp?url=dantri.com.vn&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.port80software.com/tools/compresscheck.asp?url=dantri.com.vn&amp;lt;/a&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;a href=&amp;quot;http://www.port80software.com/tools/compresscheck.asp?url=meotom.net&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.port80software.com/tools/compresscheck.asp?url=meotom.net&amp;lt;/a&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
bạn c&amp;amp;oacute; thể tải dll c&amp;amp;oacute; sẵn về tại &amp;lt;br /&amp;gt;
&amp;lt;a href=&amp;quot;http://blowery.org/httpcompress/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://blowery.org/httpcompress/&amp;lt;/a&amp;gt; &amp;lt;br /&amp;gt;
v&amp;amp;agrave; tham khảo code ở &amp;lt;br /&amp;gt;
&amp;lt;a href=&amp;quot;http://www.codeproject.com/KB/aspnet/HttpCompress.aspx&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://www.codeproject.com/KB/aspnet/HttpCompress.aspx&amp;lt;/a&amp;gt; &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Ch&amp;amp;uacute;c c&amp;amp;aacute;c bạn th&amp;amp;agrave;nh c&amp;amp;ocirc;ng :)             		  &amp;lt;span class=&amp;quot;info&amp;quot;&amp;gt;           &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;</Body><CommentEnabled>True</CommentEnabled><ViewCount>0</ViewCount><ReleaseDate>1/20/2010 12:34:50 AM</ReleaseDate><TotalComment>0</TotalComment><IsMedia>False</IsMedia><IsPicture>False</IsPicture><IsVote>True</IsVote><ArticlePassword /><PostVisible>0</PostVisible><ArticlePath>/2010/1/20/Nen-dung-luong-Website-voi-Gzip-2E2</ArticlePath><Approved>True</Approved><ImagePath /><CategoryId>26</CategoryId><ArrayCatID>26|25</ArrayCatID></Article></Articles>